package Fantasma;
import java.util.TimerTask;

public class Fantasma {
	
	private static int tiempoMuerto= 8000;
	private static int tiempoPresa= 5000;
	private Posicion posicion;
	private Estado estadoFantasma;
	private TimerTask timerParaMuerto;
	private TimerTask timerParaPresa;
	
	public Fantasma (){
		//TODO: Definir constructor con posicion y tiempos como entrada?
		this.posicion= new Posicion(0,0);
		this.estadoFantasma= new Cazador(0);
		System.out.println("Fantasma Cazador"); //TODO: Borrar luego, salida de prueba
	}
	
	public void convertirEnPresa(){
		if (estadoFantasma.puedeConvertirseEnPresa()){
			if (this.timerParaPresa != null) this.timerParaPresa.cancel();
			System.out.println("Era "+estadoFantasma+" pero me convertiste en Presa");
			this.estadoFantasma= new Presa(estadoFantasma.getAgresividad()/2);
			this.timerParaPresa= new TimerTask() {
				
				@Override
				public void run() {
					estadoFantasma= new Cazador(estadoFantasma.getAgresividad()*2);
					System.out.println("Era Presa, pero ahora soy de nuevo Cazador");//TODO:Borrar, salida de prueba
					cancel();
				}
			};
			ConsolaFantasma.temporizador.schedule(timerParaPresa, tiempoPresa);
		}
		else {
			System.out.println("Soy "+this.estadoFantasma+" y no puedo convertirme en Presa");//TODO: Salida de prueba
			//throw new ExceptionFantasma("Soy "+this.estadoFantasma+" y no puedo convertirme en Presa");
		}
	}
	
	public void matar(){
		if (this.estadoFantasma.puedeMorir()){
			System.out.println("Era "+estadoFantasma+" y me mataste");
			this.timerParaPresa.cancel();
			this.estadoFantasma= new Muerto(0);
			this.timerParaMuerto= new TimerTask() {
				
				@Override
				public void run() {
					estadoFantasma= new Cazador(0);
					System.out.println("Estaba Muerto, pero ahora soy de nuevo Cazador");//TODO: Salida de prueba
					cancel();
				}
			};
			ConsolaFantasma.temporizador.schedule(timerParaMuerto, tiempoMuerto);
		}
		else{
			System.out.println("Soy "+this.estadoFantasma+" y no puedo morir");//TODO: Salida de prueba
			//throw new ExceptionFantasma("Soy "+this.estadoFantasma+" y no puedo morir");
		}
	}
	
	public void molestar(){
		this.estadoFantasma.actualizarAgresividad();
	}
	
	public void mover(){
		this.estadoFantasma.mover(this.posicion);
	}
	
	public Posicion getPosicion(){
		return new Posicion(this.posicion);
	}
	
	public String toString(){
		return "Fantasma "+this.estadoFantasma.toString()+" con agresividad "+estadoFantasma.getAgresividad();
	}
	
	public String estadoString(){
		return this.estadoFantasma.toString();
	}
	
	public int getAgresividad(){
		return this.estadoFantasma.getAgresividad();
	}
}
